from pyramid.config import Configurator
from sqlalchemy import engine_from_config

from scp.modelo.models import initialize_sql

from scp.controlador.views import *

from pyramid.authentication import AuthTktAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy
from scp.security import goLogin


def main(global_config, **settings):
	""" This function returns a WSGI application.
	"""
	engine = engine_from_config(settings, 'sqlalchemy.')
	initialize_sql(engine)

	authn_policy = AuthTktAuthenticationPolicy(
		'sosecret')
	#authz_policy = ACLAuthorizationPolicy()

	config = Configurator(settings=settings, authentication_policy=authn_policy)
	config.add_static_view('static', 'scp:static', cache_max_age=3600)
	config.add_route('home', '/')

	config.add_route('login', '/login')
	config.add_route('logout', '/logout')
	config.add_route('roles', '/roles/{operacion}')
	config.add_route('permisos', '/permisos/{operacion}')
	config.add_route('atributos', '/atributos/{operacion}')
	config.add_route('usuarios', '/usuarios/{operacion}')
	config.add_route('proyectos', '/proyectos/{operacion}')
	config.add_route('tipos_datos', '/tipos_datos/{operacion}')
	config.add_route('tipos_items', '/tipos_items/{operacion}')
	config.add_route('menus', '/menus/{operacion}')
	config.add_route('fases', '/fases/{operacion}')
	config.add_route('items', '/items/{operacion}')
	config.add_route('desarrolloProyecto', '/desarrolloProyecto/{operacion}')
	config.add_route('relaciones', '/relaciones/{operacion}')
	config.add_route('autorizacion', '/autorizacion/{operacion}')
	config.add_route('lineas_base', '/lineas_base/{operacion}')

	config.add_view('scp.controlador.home.home', route_name='home', renderer='scp:templates/home.pt')

	config.add_view('scp.controlador.login.login', route_name='login', 
					renderer='scp:templates/login.pt')
										
	config.add_view('scp.controlador.roles.roles', route_name='roles', 
					renderer='scp:templates/roles.pt')
	config.add_view('scp.controlador.permisos.permisos', route_name='permisos', 
					renderer='json')				
	config.add_view('scp.controlador.atributos.atributos', route_name='atributos', 
					renderer='scp:templates/atributos.pt')
	config.add_view('scp.controlador.tipos_datos.tipos_datos', route_name='tipos_datos', 
					renderer='json')				
	config.add_view('scp.controlador.usuarios.usuarios', route_name='usuarios', 
					renderer='scp:templates/usuarios.pt')
	config.add_view('scp.controlador.proyectos.proyectos', route_name='proyectos', 
					renderer='scp:templates/proyectos.pt')	
	config.add_view('scp.controlador.tipos_items.tipos_items', route_name='tipos_items', 
					renderer='scp:templates/tipos_items.pt')
	config.add_view('scp.controlador.fases.fases', route_name='fases', 
					renderer='scp:templates/fases.pt')								
	config.add_view('scp.controlador.items.items', route_name='items', 
					renderer='scp:templates/items.pt')
	config.add_view('scp.controlador.desarrolloProyecto.desarrolloProyecto', route_name='desarrolloProyecto', 
					renderer='scp:templates/desarrolloProyecto.pt')
	config.add_view('scp.controlador.relaciones.relaciones', route_name='relaciones', 
					renderer='json')
	config.add_view('scp.controlador.autorizacion.autorizacion', route_name='autorizacion', 
					renderer='json')
	config.add_view('scp.controlador.lineas_base.lineas_base', route_name='lineas_base', 
					renderer='json')
	
	
					
	config.add_view('scp.controlador.login.logout', route_name='logout')
	config.add_view('scp.controlador.menus.menus', route_name='menus', 
					renderer='json')



					
					
	return config.make_wsgi_app()
